[Home] Python으로 돌아가기

실행 환경 - 예외(오류) 처리

목차

1. 참조 자료
2. 퀴즈
3. 해설 및 코드
4. 레포트

1. 참조 자료

관련 동영상: https://youtu.be/LPmhUiZIubg

2. 퀴즈

동네에 항상 대기 손님이 있는 치킨집이 있다. 대기 손님의 치킨 요리 시간을 줄이고자 자동 주문 시스템을 제작하였다. 시스템 코딩을 확인하고 적절한 예외처리 구문을 삽입하라.

조건:

3. 해설 및 코드

사용할 개념:

class SoldOutError(Exception):
    pass

chicken = 10  # 남은 치킨 수
waiting = 1  # 대기번호 시작

while True:
    try:
        print(f"[남은 치킨 : {chicken}]")
        order = int(input("치킨 몇 마리 주문하시겠습니까? "))
        
        if order < 1:
            raise ValueError
        if order > chicken:
            print("재료가 부족합니다.")
        else:
            print(f"[대기번호 {waiting}] {order} 마리 주문이 완료되었습니다.")
            waiting += 1
            chicken -= order
            
            if chicken == 0:
                raise SoldOutError
    except ValueError:
        print("잘못된 값을 입력하였습니다.")
    except SoldOutError:
        print("재고가 소진되어 더 이상 주문을 받지 않습니다.")
        break

4. 레포트

예외 처리가 적용된 프로그램을 분석하고, 추가적으로 응용할 수 있는 시나리오를 작성하라.

응용 예제:

출력 예시:

[남은 책 : 3]
몇 권을 대여하시겠습니까? 2
[대여 완료] 2권이 대여되었습니다.
[남은 책 : 1]
몇 권을 대여하시겠습니까? 2
재고가 부족합니다.
[남은 책 : 1]
몇 권을 대여하시겠습니까? 1
[대여 완료] 1권이 대여되었습니다.
모든 책이 대여되었습니다.

도서 대여 시스템 코드:

class NoBooksAvailable(Exception):
    pass

books = 3  # 남은 책 수량
while True:
    try:
        print(f"[남은 책 : {books}]")
        rent = int(input("몇 권을 대여하시겠습니까? "))
        
        if rent < 1:
            raise ValueError
        if rent > books:
            print("재고가 부족합니다.")
        else:
            print(f"[대여 완료] {rent}권이 대여되었습니다.")
            books -= rent
            
            if books == 0:
                raise NoBooksAvailable
    except ValueError:
        print("잘못된 값을 입력하였습니다.")
    except NoBooksAvailable:
        print("모든 책이 대여되었습니다.")
        break